cmake_minimum_required(VERSION 3.14)

project(RVC)

if(MSVC)
    add_compile_options(/utf-8)
endif()

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>DLL")

include_directories(include)

set(SOURCES
    src/main.cpp
)

set(LIB_SOURCES 
    # src/main.cpp
)

add_executable(${PROJECT_NAME} ${SOURCES})

find_package(Threads REQUIRED)
target_link_libraries(${PROJECT_NAME} PRIVATE Threads::Threads)

# ----------------------
# GoogleTest
# ----------------------

include(FetchContent)

FetchContent_Declare(
    googletest
    URL https://github.com/google/googletest/archive/refs/heads/main.zip
)

set(gtest_force_shared_crt ON CACHE BOOL "" FORCE)

FetchContent_MakeAvailable(googletest)

enable_testing()

option(ENABLE_COVERAGE "Enable coverage reporting" OFF)

add_executable(
    rvc_test
    tests/test_motors.cpp
    tests/test_cleaner.cpp
    tests/test_sensors.cpp
    tests/test_obstacleSensors.cpp
    
    ${LIB_SOURCES}      
)

if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
    target_compile_options(rvc_test PRIVATE --coverage -O0 -g)
    target_link_options(rvc_test PRIVATE --coverage) 
    target_link_libraries(rvc_test PRIVATE gcov)
endif()

target_link_libraries(
    rvc_test
    PRIVATE
    GTest::gtest_main
    Threads::Threads    # 로직 내에 sleep_for가 있다면 테스트에도 스레드 필요
)

include(GoogleTest)
gtest_discover_tests(rvc_test)

